草庐IT

c++ - XML Schema 到 C++ 类

全部标签

c++ - 摆脱丑陋的 C 结构

我继承了一段(大)代码,它有一个错误跟踪机制,他们将一个bool变量传递给他们调用的所有方法,并且在执行的各个阶段出现错误时,该方法被停止并返回,有时是默认值值(value)。类似(之前):#includeintfun1(intpar1,bool&psuccess){if(par1==42)return43;psuccess=false;return-1;}intfuntoo(inta,bool&psuccess){intt=fun1(a,psuccess);if(!psuccess){return-1;}return42;}voidfunthree(intb,bool&psucces

c++ - 为什么我们需要在编译期间包含 C 或 CPP 声明文件而不是像 iostream 这样的默认库?

如果C或CPP程序需要使用我们自己的带有声明的头文件和带有定义的cpp文件进行编译,我们需要在编译命令中包含带有定义的cpp文件(参见thisanswer)。但是,当我们写#include,我们不包括iostream.cpp在类似g++main.cppiostream.cpp-omain的编译语句中.如果我们编写自定义声明文件,例如hello.hpp带有类声明和hello.cpp有了定义,我们需要使用g++main.cpphello.cpp-omain编译它包括hello.hpp之后在标题中main.cpp文件。这是为什么?编辑:我们是否可以为我们的自定义头文件和cpp文件模仿标准模板

c++ - 如何在 C 和 C++ 中分配和释放 *array* 内存?

我的问题具体是关于数组,不是对象。关于malloc()/free()与new/delete的一些问题,但它们都集中在它们使用方式的差异上。我了解它们的使用方式,但我不了解是什么根本差异导致了使用差异。我经常听到C程序员说malloc()和free()是代价高昂的操作,但我从未听C++程序员这样说新建和删除。我还注意到C++没有对应于C的realloc()的操作。如果我正在编写等同于C++的vector类,我希望在调整数组大小时避免复制整个数组,但使用new和delete你必须复制。在C中,我会简单地realloc()。值得注意的是,realloc()可能只是复制整个数组,但我的印象是它

c++ - 针对库的静态链接实际上做了什么?

假设我有一个名为libfoo的库,其中包含一个类、一些静态变量、可能带有“C”链接的内容以及一些其他函数。现在我有一个如下所示的主程序:intmain(){return5+5;}当我编译和链接它时,我链接到libfoo。这会有什么影响吗?我的可执行文件的大小会增加吗?如果是这样,为什么?静态变量或其地址是否被复制到我的可执行文件中?如果有类似的问题或者我在任何方面都特别愚蠢,我们深表歉意。 最佳答案 它不会在现代链接器中做任何事情,因为它知道可执行文件实际上并不使用libfoo的符号。在我的系统上使用gcc4.4.1和ld2.20:

c++ - 有没有更快的方法在 SIMD 上乘以 2(不使用乘法)?

旧float的一个技巧是从不乘以2,而是将操作数与自身相加,如2*a=a+a。今天,使用SSE/SSE2/SSSE3/NEON/...指令集等的旧技巧是否仍然可行?我的操作数是一个vector(比如,4个float,我想乘以2)。乘以3、4...怎么样? 最佳答案 我仍在努力寻找一个例子来说明这会在哪些方面有所作为。我的直觉是,如果延迟是一个问题,那么在某些情况下x+x会更好,但如果延迟不是问题并且只有吞吐量很重要,那么它可能会更糟。但首先让我们讨论一些硬件。让我坚持使用Intelx86处理器,因为这是我最了解的。让我们考虑以下几代

c++ - 使用 malloc() 初始化类

当C++类的内存已从Cmalloc中保留时,应该如何使用它?我正在使用C库(lua),我需要向它公开一个C++类,在这种情况下,为了垃圾收集这些保留空间,lua会保留内存。一个更简单的类似场景如下:#includeclassClase{private:std::stringvalor;public:Clase(){}Clase(conststd::string&valor):valor(valor){}conststd::string&get()const{returnthis->valor;}voidset(conststd::string&valor){this->valor=va

c++ - 现在的 C 和 C++ 编译器的线程保证是什么?

我想知道编译器做出什么保证来确保对内存的线程写入在其他线程中具有可见的效果。我知道有无数个案例存在这个问题,我敢肯定,如果您有兴趣回答这个问题,您也知道,但请关注我将要介绍的案例。更准确地说,我担心会导致线程丢失其他线程完成的内存更新的情况。我不在乎(在这一点上)更新是非原子的还是同步不良:只要相关线程注意到更改,我就会很高兴。我希望编译器能够区分两种变量访问:访问必须有地址的变量;访问不一定有地址的变量。例如,如果您采用此代码段:voidsleepingbeauty(){inti=1;while(i)sleep(1);}因为i是本地的,我假设我的编译器可以优化它,让睡美人永远沉睡。v

c++ - 如何捕获 C 和 C++ 中的运行时错误?

就像修改一个CONSTint,我可以注册一个特定的函数来处理运行时错误,这样这种操作只会失败而不是终止应用程序吗? 最佳答案 如果您指的是C++,则有一个名为runtime_error的特定异常类。您可以使用catch子句捕获它:catch(std::runtime_error&e){}但是,C和C++中的许多事情(例如修改constint)会导致undefinedbehavior.您无法在运行时捕获它们。您无法捕获它们,因为不会抛出任何异常(从技术上讲,任何事情都可能发生,包括抛出异常(仅限C++),但这不是您可以或应该希望的事情

c++ - 标记化和 AST

有一个比较抽象的问题要问大家。我正在考虑参与静态代码分析项目。它使用C和C++作为开发语言,因此如果您的回复中有任何代码可以使用这两种语言中的任何一种,那就太好了。我的问题:我需要了解一些用于处理静态分析代码的基本概念/结构。我听说人们使用AST和标记化等东西。我只是想知道是否有什么可以阐明这些东西是如何应用于创建静态分析工具的?我更喜欢对标记化的解释,因为我不太了解它。我知道这是一种处理字符串的方法,但我对这个答案没有信心。此外,我知道我正在查看的项目在分析代码之前通过预处理器传递代码。谁能解释一下?当然如果是静态代码分析就不需要预处理了吗?希望有人能帮我解决这个问题。干杯。

c++ - 结构/对象内的存储顺序

考虑这两种情况:structcustomType{dataType1var1;dataType2var2;dataType3var3;};customTypeinstance1;//Assumevar1,var2andvar3wereinitializedtosomevalidvalues.customType*instance2=&instance1;dataType1firstMemberInsideStruct=(dataType1)(*instance2);classCustomType{public:dataType1member1;dataType2member2;retr